let foo: unknown = "hello";
foo = 123;
/*
unknown类型默认情况下在上面进行任意的操作都是非法的，要求必须进行类型的校验(类型缩小)才能根据类型缩小之后的类型进行对应的操作
unknown类型是typescript中比较特殊的一种类型，它用于描述不确定的变量，和any类型有点类似，但是在unknown类型的值上做任何事情都是非法的
*/
if (typeof foo === "string") { // 类型缩小
    console.log(foo.length)
}

function fun1(): string {
    return "fun1"
}

function fun2(): number {
    return 1314520
}

const flag: boolean = true
let result: unknown
if (flag) {
    result = fun1()
} else {
    result = fun2()
}
if (typeof result === "string") {
    console.log(result.length)
}
if (typeof result === "number") {
    console.log(result.toFixed(3))
}